{"id":4074,"date":"2026-09-15T16:01:57","date_gmt":"2026-09-15T20:01:57","guid":{"rendered":"https:\/\/drkeithjones.com\/?p=4074"},"modified":"2026-09-15T16:02:02","modified_gmt":"2026-09-15T20:02:02","slug":"introducing-zenv-venv-for-zeek","status":"publish","type":"post","link":"https:\/\/drkeithjones.com\/index.php\/2026\/09\/15\/introducing-zenv-venv-for-zeek\/","title":{"rendered":"Introducing zenv:\u00a0venv\u00a0for Zeek"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">If you&#8217;ve worked with Zeek for more than a few months, you&#8217;ve probably lived this: one <code>~\/zeek<\/code> install, one <code>~\/.zkg<\/code>, and a constant juggling act every time you need to test a package against a different Zeek version, try a dev branch, or keep a stable release untouched while you experiment. Switching means rebuilding, reconfiguring, or just crossing your fingers.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>zenv<\/strong> fixes that by doing for Zeek what <code>venv<\/code> does for Python: it lets you keep multiple, fully isolated Zeek installs on one machine and pick which one is &#8220;active&#8221; per shell.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/github.com\/keithjjones\/zenv\">https:\/\/github.com\/keithjjones\/zenv<\/a><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">What it actually does<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Each environment is just a directory with its own install prefix and its own <code>zkg<\/code> state:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>zenv new dev<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">This creates <code>~\/zenv\/dev\/zeek<\/code> (an empty install prefix) and <code>~\/zenv\/dev\/zkg<\/code> (an empty zkg state directory), then prints the prefix so you know where to point <code>--prefix<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">You build Zeek exactly like you always do \u2014 zenv doesn&#8217;t run <code>configure<\/code>, doesn&#8217;t run <code>make<\/code>, and has zero opinion about your build flags:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>.\/configure --prefix=\"$(zenv prefix dev)\"<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Once it&#8217;s built, <code>zenv autoconfig dev<\/code> wires <code>zkg<\/code> to that install, and <code>zenv activate dev<\/code> sets up your shell \u2014 <code>PATH<\/code>, <code>PYTHONPATH<\/code>, <code>MANPATH<\/code>, <code>ZEEKPATH<\/code>, <code>ZEEK_PLUGIN_PATH<\/code>, all pointed at that one environment. Activation is shell-local, so a second terminal can have a completely different environment active at the same time, with no symlink games.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Switching is a one-liner:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>zenv activate default\nzenv deactivate<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><code>deactivate<\/code> restores your shell exactly as it was \u2014 including leaving variables unset if they started unset.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">What it deliberately doesn&#8217;t do<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">zenv <strong>never builds Zeek.<\/strong> No <code>configure<\/code>, no build tool, no build-flag opinions. It&#8217;s purely the bookkeeping layer: create the directories, tell you the right <code>--prefix<\/code>, wire up <code>zkg<\/code> afterward, and manage your shell&#8217;s environment on activate\/deactivate. Your build process stays entirely yours.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Already have installs lying around?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><code>zenv adopt<\/code> brings an existing <code>~\/zeek<\/code> and <code>~\/.zkg<\/code> under zenv&#8217;s management without touching them. And <code>zenv doctor<\/code> will diagnose common problems \u2014 the wrong <code>zkg<\/code> winning, packages that seem to have disappeared, plugins that won&#8217;t load \u2014 for one environment or all of them at once.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Getting started<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>.\/install.sh<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">That&#8217;s it \u2014 it installs the <code>zenv<\/code> binary, shell completions, and one clearly marked block in your rc file (with a backup made first). <code>.\/install.sh --dry-run<\/code> shows you what would happen without changing anything.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If you&#8217;ve ever lost an afternoon to a Zeek install that quietly broke because two projects wanted different versions in the same <code>~\/zeek<\/code>, zenv is built to make that problem disappear.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>If you&#8217;ve worked with Zeek for more than a few months, you&#8217;ve probably lived this: one ~\/zeek install, one ~\/.zkg, and a constant juggling act every time you need to test a package against a different Zeek version, try a dev branch, or keep a stable release untouched while you experiment. Switching means rebuilding, reconfiguring, [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[91,4,6],"tags":[],"class_list":["post-4074","post","type-post","status-publish","format-standard","hentry","category-open-source","category-zeek","category-zkg"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"If you&#039;ve worked with Zeek for more than a few months, you&#039;ve probably lived this: one ~\/zeek install, one ~\/.zkg, and a constant juggling act every time you need to test a package against a different Zeek version, try a dev branch, or keep a stable release untouched while you experiment. Switching means rebuilding, reconfiguring,\" \/>\n\t<meta name=\"robots\" content=\"max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n\t<meta name=\"author\" content=\"drkeithjones\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/drkeithjones.com\/index.php\/2026\/09\/15\/introducing-zenv-venv-for-zeek\/\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"en_US\" \/>\n\t\t<meta property=\"og:site_name\" content=\"DrKeithJones.com - A cybersecurity researcher&#039;s journey.\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"Introducing zenv: venv for Zeek - DrKeithJones.com\" \/>\n\t\t<meta property=\"og:description\" content=\"If you&#039;ve worked with Zeek for more than a few months, you&#039;ve probably lived this: one ~\/zeek install, one ~\/.zkg, and a constant juggling act every time you need to test a package against a different Zeek version, try a dev branch, or keep a stable release untouched while you experiment. Switching means rebuilding, reconfiguring,\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/drkeithjones.com\/index.php\/2026\/09\/15\/introducing-zenv-venv-for-zeek\/\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/drkeithjones.com\/wp-content\/uploads\/2023\/02\/ecb.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/drkeithjones.com\/wp-content\/uploads\/2023\/02\/ecb.jpg\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2026-09-15T20:01:57+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2026-09-15T20:02:02+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/keithjjones\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n\t\t<meta name=\"twitter:site\" content=\"@keithjjones\" \/>\n\t\t<meta name=\"twitter:title\" content=\"Introducing zenv: venv for Zeek - DrKeithJones.com\" \/>\n\t\t<meta name=\"twitter:description\" content=\"If you&#039;ve worked with Zeek for more than a few months, you&#039;ve probably lived this: one ~\/zeek install, one ~\/.zkg, and a constant juggling act every time you need to test a package against a different Zeek version, try a dev branch, or keep a stable release untouched while you experiment. Switching means rebuilding, reconfiguring,\" \/>\n\t\t<meta name=\"twitter:creator\" content=\"@keithjjones\" \/>\n\t\t<meta name=\"twitter:image\" content=\"https:\/\/drkeithjones.com\/wp-content\/uploads\/2023\/02\/ecb.jpg\" \/>\n\t\t<script type=\"application\/ld+json\" class=\"aioseo-schema\">\n\t\t\t{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"BlogPosting\",\"@id\":\"https:\\\/\\\/drkeithjones.com\\\/index.php\\\/2026\\\/09\\\/15\\\/introducing-zenv-venv-for-zeek\\\/#blogposting\",\"name\":\"Introducing zenv: venv for Zeek - DrKeithJones.com\",\"headline\":\"Introducing zenv:\\u00a0venv\\u00a0for Zeek\",\"author\":{\"@id\":\"https:\\\/\\\/drkeithjones.com\\\/index.php\\\/author\\\/drkeithjones_iitpux\\\/#author\"},\"publisher\":{\"@id\":\"https:\\\/\\\/drkeithjones.com\\\/#person\"},\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\\\/\\\/drkeithjones.com\\\/index.php\\\/2026\\\/09\\\/15\\\/introducing-zenv-venv-for-zeek\\\/#articleImage\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/dee83de34730f3a340cb0cdf15ab1de7f04e96f129f78c426da03098df1912fb?s=96&d=retro&r=g\",\"width\":96,\"height\":96,\"caption\":\"drkeithjones\"},\"datePublished\":\"2026-09-15T16:01:57-04:00\",\"dateModified\":\"2026-09-15T16:02:02-04:00\",\"inLanguage\":\"en-US\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/drkeithjones.com\\\/index.php\\\/2026\\\/09\\\/15\\\/introducing-zenv-venv-for-zeek\\\/#webpage\"},\"isPartOf\":{\"@id\":\"https:\\\/\\\/drkeithjones.com\\\/index.php\\\/2026\\\/09\\\/15\\\/introducing-zenv-venv-for-zeek\\\/#webpage\"},\"articleSection\":\"Open Source, Zeek, zkg\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/drkeithjones.com\\\/index.php\\\/2026\\\/09\\\/15\\\/introducing-zenv-venv-for-zeek\\\/#breadcrumblist\",\"itemListElement\":[{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/drkeithjones.com#listItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/drkeithjones.com\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/drkeithjones.com\\\/index.php\\\/category\\\/zeek\\\/#listItem\",\"name\":\"Zeek\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/drkeithjones.com\\\/index.php\\\/category\\\/zeek\\\/#listItem\",\"position\":2,\"name\":\"Zeek\",\"item\":\"https:\\\/\\\/drkeithjones.com\\\/index.php\\\/category\\\/zeek\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/drkeithjones.com\\\/index.php\\\/2026\\\/09\\\/15\\\/introducing-zenv-venv-for-zeek\\\/#listItem\",\"name\":\"Introducing zenv:\\u00a0venv\\u00a0for Zeek\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/drkeithjones.com#listItem\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/drkeithjones.com\\\/index.php\\\/2026\\\/09\\\/15\\\/introducing-zenv-venv-for-zeek\\\/#listItem\",\"position\":3,\"name\":\"Introducing zenv:\\u00a0venv\\u00a0for Zeek\",\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/drkeithjones.com\\\/index.php\\\/category\\\/zeek\\\/#listItem\",\"name\":\"Zeek\"}}]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/drkeithjones.com\\\/#person\",\"name\":\"drkeithjones\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\\\/\\\/drkeithjones.com\\\/index.php\\\/2026\\\/09\\\/15\\\/introducing-zenv-venv-for-zeek\\\/#personImage\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/dee83de34730f3a340cb0cdf15ab1de7f04e96f129f78c426da03098df1912fb?s=96&d=retro&r=g\",\"width\":96,\"height\":96,\"caption\":\"drkeithjones\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/drkeithjones.com\\\/index.php\\\/author\\\/drkeithjones_iitpux\\\/#author\",\"url\":\"https:\\\/\\\/drkeithjones.com\\\/index.php\\\/author\\\/drkeithjones_iitpux\\\/\",\"name\":\"drkeithjones\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\\\/\\\/drkeithjones.com\\\/index.php\\\/2026\\\/09\\\/15\\\/introducing-zenv-venv-for-zeek\\\/#authorImage\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/dee83de34730f3a340cb0cdf15ab1de7f04e96f129f78c426da03098df1912fb?s=96&d=retro&r=g\",\"width\":96,\"height\":96,\"caption\":\"drkeithjones\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/drkeithjones.com\\\/index.php\\\/2026\\\/09\\\/15\\\/introducing-zenv-venv-for-zeek\\\/#webpage\",\"url\":\"https:\\\/\\\/drkeithjones.com\\\/index.php\\\/2026\\\/09\\\/15\\\/introducing-zenv-venv-for-zeek\\\/\",\"name\":\"Introducing zenv: venv for Zeek - DrKeithJones.com\",\"description\":\"If you've worked with Zeek for more than a few months, you've probably lived this: one ~\\\/zeek install, one ~\\\/.zkg, and a constant juggling act every time you need to test a package against a different Zeek version, try a dev branch, or keep a stable release untouched while you experiment. Switching means rebuilding, reconfiguring,\",\"inLanguage\":\"en-US\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/drkeithjones.com\\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/drkeithjones.com\\\/index.php\\\/2026\\\/09\\\/15\\\/introducing-zenv-venv-for-zeek\\\/#breadcrumblist\"},\"author\":{\"@id\":\"https:\\\/\\\/drkeithjones.com\\\/index.php\\\/author\\\/drkeithjones_iitpux\\\/#author\"},\"creator\":{\"@id\":\"https:\\\/\\\/drkeithjones.com\\\/index.php\\\/author\\\/drkeithjones_iitpux\\\/#author\"},\"datePublished\":\"2026-09-15T16:01:57-04:00\",\"dateModified\":\"2026-09-15T16:02:02-04:00\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/drkeithjones.com\\\/#website\",\"url\":\"https:\\\/\\\/drkeithjones.com\\\/\",\"name\":\"DrKeithJones.com\",\"description\":\"A cybersecurity researcher's journey.\",\"inLanguage\":\"en-US\",\"publisher\":{\"@id\":\"https:\\\/\\\/drkeithjones.com\\\/#person\"}}]}\n\t\t<\/script>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"Introducing zenv: venv for Zeek - DrKeithJones.com","description":"If you've worked with Zeek for more than a few months, you've probably lived this: one ~\/zeek install, one ~\/.zkg, and a constant juggling act every time you need to test a package against a different Zeek version, try a dev branch, or keep a stable release untouched while you experiment. Switching means rebuilding, reconfiguring,","canonical_url":"https:\/\/drkeithjones.com\/index.php\/2026\/09\/15\/introducing-zenv-venv-for-zeek\/","robots":"max-snippet:-1, max-image-preview:large, max-video-preview:-1","keywords":"","webmasterTools":{"miscellaneous":""},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"BlogPosting","@id":"https:\/\/drkeithjones.com\/index.php\/2026\/09\/15\/introducing-zenv-venv-for-zeek\/#blogposting","name":"Introducing zenv: venv for Zeek - DrKeithJones.com","headline":"Introducing zenv:\u00a0venv\u00a0for Zeek","author":{"@id":"https:\/\/drkeithjones.com\/index.php\/author\/drkeithjones_iitpux\/#author"},"publisher":{"@id":"https:\/\/drkeithjones.com\/#person"},"image":{"@type":"ImageObject","@id":"https:\/\/drkeithjones.com\/index.php\/2026\/09\/15\/introducing-zenv-venv-for-zeek\/#articleImage","url":"https:\/\/secure.gravatar.com\/avatar\/dee83de34730f3a340cb0cdf15ab1de7f04e96f129f78c426da03098df1912fb?s=96&d=retro&r=g","width":96,"height":96,"caption":"drkeithjones"},"datePublished":"2026-09-15T16:01:57-04:00","dateModified":"2026-09-15T16:02:02-04:00","inLanguage":"en-US","mainEntityOfPage":{"@id":"https:\/\/drkeithjones.com\/index.php\/2026\/09\/15\/introducing-zenv-venv-for-zeek\/#webpage"},"isPartOf":{"@id":"https:\/\/drkeithjones.com\/index.php\/2026\/09\/15\/introducing-zenv-venv-for-zeek\/#webpage"},"articleSection":"Open Source, Zeek, zkg"},{"@type":"BreadcrumbList","@id":"https:\/\/drkeithjones.com\/index.php\/2026\/09\/15\/introducing-zenv-venv-for-zeek\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/drkeithjones.com#listItem","position":1,"name":"Home","item":"https:\/\/drkeithjones.com","nextItem":{"@type":"ListItem","@id":"https:\/\/drkeithjones.com\/index.php\/category\/zeek\/#listItem","name":"Zeek"}},{"@type":"ListItem","@id":"https:\/\/drkeithjones.com\/index.php\/category\/zeek\/#listItem","position":2,"name":"Zeek","item":"https:\/\/drkeithjones.com\/index.php\/category\/zeek\/","nextItem":{"@type":"ListItem","@id":"https:\/\/drkeithjones.com\/index.php\/2026\/09\/15\/introducing-zenv-venv-for-zeek\/#listItem","name":"Introducing zenv:\u00a0venv\u00a0for Zeek"},"previousItem":{"@type":"ListItem","@id":"https:\/\/drkeithjones.com#listItem","name":"Home"}},{"@type":"ListItem","@id":"https:\/\/drkeithjones.com\/index.php\/2026\/09\/15\/introducing-zenv-venv-for-zeek\/#listItem","position":3,"name":"Introducing zenv:\u00a0venv\u00a0for Zeek","previousItem":{"@type":"ListItem","@id":"https:\/\/drkeithjones.com\/index.php\/category\/zeek\/#listItem","name":"Zeek"}}]},{"@type":"Person","@id":"https:\/\/drkeithjones.com\/#person","name":"drkeithjones","image":{"@type":"ImageObject","@id":"https:\/\/drkeithjones.com\/index.php\/2026\/09\/15\/introducing-zenv-venv-for-zeek\/#personImage","url":"https:\/\/secure.gravatar.com\/avatar\/dee83de34730f3a340cb0cdf15ab1de7f04e96f129f78c426da03098df1912fb?s=96&d=retro&r=g","width":96,"height":96,"caption":"drkeithjones"}},{"@type":"Person","@id":"https:\/\/drkeithjones.com\/index.php\/author\/drkeithjones_iitpux\/#author","url":"https:\/\/drkeithjones.com\/index.php\/author\/drkeithjones_iitpux\/","name":"drkeithjones","image":{"@type":"ImageObject","@id":"https:\/\/drkeithjones.com\/index.php\/2026\/09\/15\/introducing-zenv-venv-for-zeek\/#authorImage","url":"https:\/\/secure.gravatar.com\/avatar\/dee83de34730f3a340cb0cdf15ab1de7f04e96f129f78c426da03098df1912fb?s=96&d=retro&r=g","width":96,"height":96,"caption":"drkeithjones"}},{"@type":"WebPage","@id":"https:\/\/drkeithjones.com\/index.php\/2026\/09\/15\/introducing-zenv-venv-for-zeek\/#webpage","url":"https:\/\/drkeithjones.com\/index.php\/2026\/09\/15\/introducing-zenv-venv-for-zeek\/","name":"Introducing zenv: venv for Zeek - DrKeithJones.com","description":"If you've worked with Zeek for more than a few months, you've probably lived this: one ~\/zeek install, one ~\/.zkg, and a constant juggling act every time you need to test a package against a different Zeek version, try a dev branch, or keep a stable release untouched while you experiment. Switching means rebuilding, reconfiguring,","inLanguage":"en-US","isPartOf":{"@id":"https:\/\/drkeithjones.com\/#website"},"breadcrumb":{"@id":"https:\/\/drkeithjones.com\/index.php\/2026\/09\/15\/introducing-zenv-venv-for-zeek\/#breadcrumblist"},"author":{"@id":"https:\/\/drkeithjones.com\/index.php\/author\/drkeithjones_iitpux\/#author"},"creator":{"@id":"https:\/\/drkeithjones.com\/index.php\/author\/drkeithjones_iitpux\/#author"},"datePublished":"2026-09-15T16:01:57-04:00","dateModified":"2026-09-15T16:02:02-04:00"},{"@type":"WebSite","@id":"https:\/\/drkeithjones.com\/#website","url":"https:\/\/drkeithjones.com\/","name":"DrKeithJones.com","description":"A cybersecurity researcher's journey.","inLanguage":"en-US","publisher":{"@id":"https:\/\/drkeithjones.com\/#person"}}]},"og:locale":"en_US","og:site_name":"DrKeithJones.com - A cybersecurity researcher's journey.","og:type":"article","og:title":"Introducing zenv: venv for Zeek - DrKeithJones.com","og:description":"If you've worked with Zeek for more than a few months, you've probably lived this: one ~\/zeek install, one ~\/.zkg, and a constant juggling act every time you need to test a package against a different Zeek version, try a dev branch, or keep a stable release untouched while you experiment. Switching means rebuilding, reconfiguring,","og:url":"https:\/\/drkeithjones.com\/index.php\/2026\/09\/15\/introducing-zenv-venv-for-zeek\/","og:image":"https:\/\/drkeithjones.com\/wp-content\/uploads\/2023\/02\/ecb.jpg","og:image:secure_url":"https:\/\/drkeithjones.com\/wp-content\/uploads\/2023\/02\/ecb.jpg","article:published_time":"2026-09-15T20:01:57+00:00","article:modified_time":"2026-09-15T20:02:02+00:00","article:publisher":"https:\/\/www.facebook.com\/keithjjones","twitter:card":"summary_large_image","twitter:site":"@keithjjones","twitter:title":"Introducing zenv: venv for Zeek - DrKeithJones.com","twitter:description":"If you've worked with Zeek for more than a few months, you've probably lived this: one ~\/zeek install, one ~\/.zkg, and a constant juggling act every time you need to test a package against a different Zeek version, try a dev branch, or keep a stable release untouched while you experiment. Switching means rebuilding, reconfiguring,","twitter:creator":"@keithjjones","twitter:image":"https:\/\/drkeithjones.com\/wp-content\/uploads\/2023\/02\/ecb.jpg"},"aioseo_meta_data":{"post_id":"4074","title":null,"description":null,"keywords":null,"keyphrases":{"focus":{"keyphrase":"","score":0,"analysis":{"keyphraseInTitle":{"score":0,"maxScore":9,"error":1}}},"additional":[]},"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":"","og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"BlogPosting","isEnabled":true},"graphs":[]},"schema_type":"default","schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":"-1","robots_max_videopreview":"-1","robots_max_imagepreview":"large","priority":null,"frequency":"default","local_seo":null,"breadcrumb_settings":null,"limit_modified_date":false,"ai":{"faqs":[],"keyPoints":[],"schemas":[],"titles":[],"descriptions":[],"socialPosts":{"email":{"subject":"","preview":"","content":""},"linkedin":[],"twitter":[],"facebook":[],"instagram":[]}},"created":"2026-09-15 20:02:03","updated":"2026-09-16 08:59:06","seo_analyzer_scan_date":null,"focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"aioseo_breadcrumb":"<div class=\"aioseo-breadcrumbs\"><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/drkeithjones.com\" title=\"Home\">Home<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/drkeithjones.com\/index.php\/category\/zeek\/\" title=\"Zeek\">Zeek<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\tIntroducing zenv: venv for Zeek\n\t\t<\/span><\/div>","aioseo_breadcrumb_json":[{"label":"Home","link":"https:\/\/drkeithjones.com"},{"label":"Zeek","link":"https:\/\/drkeithjones.com\/index.php\/category\/zeek\/"},{"label":"Introducing zenv:\u00a0venv\u00a0for Zeek","link":"https:\/\/drkeithjones.com\/index.php\/2026\/09\/15\/introducing-zenv-venv-for-zeek\/"}],"jetpack-related-posts":[],"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/drkeithjones.com\/index.php\/wp-json\/wp\/v2\/posts\/4074","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/drkeithjones.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/drkeithjones.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/drkeithjones.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/drkeithjones.com\/index.php\/wp-json\/wp\/v2\/comments?post=4074"}],"version-history":[{"count":0,"href":"https:\/\/drkeithjones.com\/index.php\/wp-json\/wp\/v2\/posts\/4074\/revisions"}],"wp:attachment":[{"href":"https:\/\/drkeithjones.com\/index.php\/wp-json\/wp\/v2\/media?parent=4074"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/drkeithjones.com\/index.php\/wp-json\/wp\/v2\/categories?post=4074"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/drkeithjones.com\/index.php\/wp-json\/wp\/v2\/tags?post=4074"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}