specific post is not excluded from the loop

You’re just off by one letter it seems.

post__not_in => array(118)

Post & Page Parameters

You can also try adding an if statement, such as:

if($post->ID != 118) :

… run rest of code

Though not optimal, without seeing the rest of your template I can’t be certain.

Additional Edit:

<?php
$loop = new WP_Query(array(
    'post_type'       => 'cpt',
    'orderby'         => 'date',
    'order'           => 'DESC',
    'posts_per_page'  => -1
));
if($loop->have_posts()) :while($loop->have_posts()) : $loop->the_post();
    if($post->ID != 118) :
?>
The Title is: <?php the_title(); ?>. The ID is: <?php $post->ID; ?>
<?php endif; endwhile; endif; wp_reset_query(); ?>

Using this simple example on a test CPT I created, and creating a few test posts (plus using a random ID from one of them), the post did not display. If it still displays for you, it is either not the correct $post->ID, or you’re missing something from your examples.